home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 145 / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z / Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin / tools / sharp / sxwork3.lzh / 福袋 / 注釈付ヘッダ / SXMEMORY.H < prev    next >
Text File  |  1994-02-20  |  7KB  |  239 lines

  1. /*
  2.  * sxmemory.h X68k SX_SYSTEM ver 2.01 Copyright 1994 SHARP/First Class Technology
  3.  */
  4. #ifndef __SXMEMORY_H
  5. #define __SXMEMORY_H
  6.  
  7. #ifndef __SXDEF2_H
  8. #include <sxdef2.h>
  9. #endif
  10.  
  11. #ifdef FORWORD
  12. #define __PROTO_TYPE
  13. #endif
  14. #ifdef __STDC__
  15. #define __PROTO_TYPE
  16. #endif
  17.  
  18. typedef struct Block    Block;        /* ブロックレコード        */
  19. typedef struct Master    Master;        /* マスターポインタ        */
  20. /*
  21.  *    メモリマン (Memory Man)
  22.  */
  23. /* ブロック属性フラグ */
  24. #define M_RSC        (1 << 1)    /* リソース属性            */
  25. #define M_MASTER    (1 << 2)    /* マスターポインタ属性        */
  26. #define M_UNPRG        (1 << 3)    /* バージ不可属性        */
  27. #define M_LOCK        (1 << 4)    /* ロック属性            */
  28. #define M_NONREL    (1 << 5)    /* 再配置不能属性        */
  29. #define M_TRAIL        (1 << 6)    /* 終端属性            */
  30. #define M_ALLOC        (1 << 7)    /* 割当済属性            */
  31.  
  32. enum MMErrorCode {            /* メモリマンのエラーコード    */
  33.     ER_NOMEM    =  -0x0400,    /* ブロックの確保に失敗した    */
  34.     ER_ODDADR,            /* 奇数番地を指している        */
  35.     ER_ZONEID,            /* カレントヒープが異常        */
  36.     ER_NULLPTR,            /* ポインタがヌルポインタ    */
  37.     ER_NULLHDL,            /* ハンドルがヌルハンドル    */
  38.     ER_EMPHDL,            /* ハンドルが空のハンドル    */
  39.     ER_NOTFRE,            /* フリーブロックでない        */
  40.     ER_NOTALO,            /* 割当済ブロックでない        */
  41.     ER_NOTNON,            /* 再配置不能ブロックでない    */
  42.     ER_NOTREL,            /* 再配置可能ブロックでない    */
  43.     ER_NOTLOC,            /* ロックされたブロックでない    */
  44.     ER_NOTUNL,            /* ロックされていないブロックでない */
  45.     ER_NOTPUR,            /* パージ可能なブロックでない    */
  46.     ER_NOTUNP,            /* パージ不可なブロックでない    */
  47.     ER_ILPROP,            /* ブロック属性の指定が異常    */
  48.     ER_DIFTYP,            /* フリーブロックと割当済ブロックを
  49.                        連結しようとした        */
  50.     ER_LESSIZ,            /* 初期化のアドレス範囲が小さい    */
  51.     ER_SPLIT,            /* ブロックの分割に失敗した    */
  52.     ER_SIZEPU    /* -0x03ee */    /* パージ可能なブロックの大きさを
  53.                        変更しようとした        */
  54. };
  55.  
  56. struct Heap {                /* ヒープレコード        */
  57.     long ID;            /* ヒープ識別子            */
  58.     long version;            /* メモリマンのバージョン    */
  59.     void *heapData;            /* ヒープデータの先頭アドレス    */
  60.     void *trailer;            /* 終端ブロックのアドレス    */
  61.     long moreMst;            /* 1度に作成するマスターポインタの数 */
  62.     void (*fncCompact)(void);    /* 再配置の開始告知関数        */
  63.     void (*fncPurge)(Heap *, Handle); /* パージ告知関数        */
  64.     void (*fncMelt)(void);        /* システム予約            */
  65.     int (*fncGrowHeap)(Heap *, long); /* グローヒープ関数        */
  66.     long totalFree;            /* フリーブロックの総バイト数    */
  67.     Master *freeMst;        /* フリーマスターポインタのリスト */
  68.     Pointer alloc;            /* 割り当て時、次に探す位置    */
  69.     Pointer spare;
  70.     Pointer purge;
  71.     char vis;
  72.     char pad;
  73.     short usrFlag;
  74.     long cntMemCompact;        /* MMMemCompactを実行した回数    */
  75.     long cntMemPurge;        /* MMMemPurgeを実行した回数    */
  76.     long cntMemMelt;        /* MMMemMeltを実行した回数    */
  77.     long cntPtrNew;            /* MMPtrNewが成功した回数    */
  78.     long cntPtrDispose;        /* MMPtrDisposeが成功した回数    */
  79.     long cntMstBind;        /* MMMstBindが成功した回数    */
  80.     long cntMstFree;        /* MMMstFreeが成功した回数    */
  81.     long cntMst;            /* 存在するマスターポインタの数    */
  82.     long usrWord;            /* ユーザーワード        */
  83.     unsigned char data[_VARLEN];    /* ヒープデータ(可変長データ)    */
  84. };
  85.  
  86. struct Block {                /* ブロックレコード        */
  87.     long physicalSize;        /* 物理サイズ            */
  88.     union {
  89.         Heap *toHeap;        /* 再配置不能ブロックなら
  90.                        ヒープへのポインタ        */
  91.         long relativeHdl;    /* 再配置可能ブロックなら
  92.                        リラティブハンドル        */
  93.     } u;
  94.     unsigned char property;        /* ブロック属性            */
  95.     unsigned char sizeCorrection;    /* サイズコレクション        */
  96.     short usrFlag;            /* ユーザーフラグ        */
  97.     long usrWord;            /* ユーザーワード        */
  98.     unsigned char data[_VARLEN];    /* ブロックデータ(可変長データ)*/
  99. };
  100.  
  101. struct Master {                /* マスターポインタ        */
  102.     union {
  103.         void *toBlockData;    /* ブロックデータの先頭アドレス    */
  104.         Master *next;        /* 次のマスターポインタ        */
  105.     } u;
  106.     short number;
  107.     char state;
  108.     char pad;
  109. };
  110.  
  111. #ifdef __PROTO_TYPE
  112.  
  113. Heap *MMHeapInit(void *, void *, int, int (*)(Heap *, long), BOOLEAN);
  114. Master *MMBlockMstGet(Heap *, Block *);
  115. Block *MMMemCompact(Heap *, long);
  116. Block *MMMemPurge(Heap *, long);
  117. Block *MMMemMelt(Heap *, long);
  118. Block *MMMemReserve(Heap *, long);
  119. long MMMemSizeFree(Heap *);
  120. long MMMemSizeComp(Heap *);
  121. long MMMemSizePurg(Heap *);
  122. long MMMemSizeMelt(Heap *);
  123. int MMMemErrorGet(void);
  124. int MMMemErrorSet(int);
  125. Heap *MMChGet(void);
  126. void MMChSet(Heap *);
  127. Pointer MMChPtrNew(long);
  128. int MMChMstMore(void);
  129. Master *MMChMstNew(void);
  130. _Handle MMChHdlNew(long);
  131. Block *MMChCompact(long);
  132. Block *MMChPurge(long);
  133. Block *MMChMelt(long);
  134. Block *MMChReserve(long);
  135. long MMChFreeSize(void);
  136. int (*MMChGrowHeapGet(void))(Heap *, long);
  137. int (*MMChGrowHeapSet(int (*)(Heap *, long)))(Heap *, long);
  138. void (*MMChPurgeGet(void))(Heap *, _Handle);
  139. void (*MMChPurgeSet(void (*)(Heap *, _Handle)))(Heap *, _Handle);
  140. void (*MMChCompactGet(void))(void);
  141. void (*MMChCompactSet(void (*)(void)))(void);
  142. Pointer MMPtrNew(Heap *, long);
  143. Heap *MMPtrHeap(Pointer);
  144. void MMPtrDispose(Pointer);
  145. long MMPtrSizeGet(Pointer);
  146. int MMPtrSizeSet(Pointer, long);
  147. int MMPtrPropGet(Pointer);
  148. int MMPtrPropSet(Pointer, int);
  149. int MMMstAllocate(Heap *);
  150. Master *MMMstBind(Heap *);
  151. _Handle MMHdlNew(Heap *, long);
  152. Heap *MMHdlHeap(_Handle);
  153. void MMHdlDispose(_Handle);
  154. long MMHdlSizeGet(_Handle);
  155. int MMHdlSizeSet(_Handle, long);
  156. int MMHdlEmpty(_Handle);
  157. int MMHdlRealloc(_Handle, long);
  158. int MMHdlMoveHi(_Handle);
  159. int MMHdlPropGet(_Handle);
  160. int MMHdlPropSet(_Handle, int);
  161. void MMHdlLock(_Handle);
  162. void MMHdlUnlock(_Handle);
  163. void MMHdlPurge(_Handle);
  164. void MMHdlNoPurge(_Handle);
  165. int MMHdlIns(_Handle, long, long);
  166. int MMHdlDel(_Handle, long, long);
  167. Block *MMMemHiReserve(Heap *, long);
  168. Block *MMPtrBlock(Pointer);
  169. Block *MMHdlBlock(_Handle);
  170. Master *MMHdlMstGet(Heap *, void *);
  171. Block *MMChHiReserve(long);
  172.  
  173. #undef __PROTO_TYPE
  174. #else
  175.  
  176. Heap *MMHeapInit();
  177. Master *MMBlockMstGet();
  178. Block *MMMemCompact();
  179. Block *MMMemPurge();
  180. Block *MMMemMelt();
  181. Block *MMMemReserve();
  182. long MMMemSizeFree();
  183. long MMMemSizeComp();
  184. long MMMemSizePurg();
  185. long MMMemSizeMelt();
  186. int MMMemErrorGet();
  187. int MMMemErrorSet();
  188. Heap *MMChGet();
  189. void MMChSet();
  190. Pointer MMChPtrNew();
  191. int MMChMstMore();
  192. Master *MMChMstNew();
  193. _Handle MMChHdlNew();
  194. Block *MMChCompact();
  195. Block *MMChPurge();
  196. Block *MMChMelt();
  197. Block *MMChReserve();
  198. long MMChFreeSize();
  199. int (*MMChGrowHeapGet())();
  200. int (*MMChGrowHeapSet())();
  201. void (*MMChPurgeGet())();
  202. void (*MMChPurgeSet())();
  203. void (*MMChCompactGet())();
  204. void (*MMChCompactSet())();
  205. Pointer MMPtrNew();
  206. Heap *MMPtrHeap();
  207. void MMPtrDispose();
  208. long MMPtrSizeGet();
  209. int MMPtrSizeSet();
  210. int MMPtrPropGet();
  211. int MMPtrPropSet();
  212. int MMMstAllocate();
  213. Master *MMMstBind();
  214. _Handle MMHdlNew();
  215. Heap *MMHdlHeap();
  216. void MMHdlDispose();
  217. long MMHdlSizeGet();
  218. int MMHdlSizeSet();
  219. int MMHdlEmpty();
  220. int MMHdlRealloc();
  221. int MMHdlMoveHi();
  222. int MMHdlPropGet();
  223. int MMHdlPropSet();
  224. void MMHdlLock();
  225. void MMHdlUnlock();
  226. void MMHdlPurge();
  227. void MMHdlNoPurge();
  228. int MMHdlIns();
  229. int MMHdlDel();
  230. Block *MMMemHiReserve();
  231. Block *MMPtrBlock();
  232. Block *MMHdlBlock();
  233. Master *MMHdlMstGet();
  234. Block *MMChHiReserve();
  235.  
  236. #endif __PROTO_TYPE
  237.  
  238. #endif __SXMEMORY_H
  239.